package cliente.vista;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.GroupLayout.Alignment;

import cliente.controle.ClienteControlador;
import cliente.controle.GerenteControlador;
import cliente.modelo.Cliente;
import cliente.modelo.Gerente;
import cliente.modelo.TipoPessoa;

public class AlterarClienteView {

	private JFrame tela;
	private JLabel nome;
	private JLabel email;
	private JLabel cpfCnpj;
	private JLabel login;
	private JLabel trocaGerente;
	private JTextField nomeCampo;
	private JTextField emailCampo;
	private JTextField cpfCnpjCampo;
	private JTextField loginCampo;
	private JComboBox trocaGerenteCampo;

	private JLabel autorizacao;
	private JPasswordField senha;
	private VerClientesView verClientesView;
	private VisualizarClienteView visualizarClienteView;

	private ActionListener ouvinte;
	private JPanel painel;
	private JButton voltar;
	private JButton alterar;

	private Cliente cliente;

	public void iniciaAlterarClienteView(Cliente cliente,
			VerClientesView verClientesView,
			VisualizarClienteView visualizarClienteView)
			throws NumberFormatException, SQLException, IOException {
		this.verClientesView = verClientesView;
		this.visualizarClienteView = visualizarClienteView;

		this.cliente = cliente;
		ouvinte = new acao();
		tela = new JFrame();
		tela.setBounds(500, 300, 500, 300);
		tela.setResizable(false);
		tela.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		tela.setTitle("Alterar Dados do Cliente");
		painel = new JPanel();

		GroupLayout layout = new GroupLayout(painel);
		painel.setLayout(layout);

		layout.setAutoCreateGaps(true);
		layout.setAutoCreateContainerGaps(true);

		voltar = new JButton("Voltar");
		voltar.addActionListener(ouvinte);
		alterar = new JButton("Alterar");
		alterar.addActionListener(ouvinte);

		autorizacao = new JLabel("CLIENTE: digite sua senha");
		nome = new JLabel("Nome do Cliente: ");
		login = new JLabel("Login do Cliente: ");
		email = new JLabel("Email do Cliente: ");
		trocaGerente = new JLabel("Escolher Gerente: ");
		if (cliente.getTipoPessoa() == TipoPessoa.FISICA) {
			cpfCnpj = new JLabel("CPF do Cliente: ");
		} else {
			cpfCnpj = new JLabel("CNPJ do Cliente: ");
		}
		nomeCampo = new JTextField(cliente.getNome());
		loginCampo = new JTextField(cliente.getLogin());
		emailCampo = new JTextField(cliente.getEmail());
		cpfCnpjCampo = new JTextField(cliente.getCpfCnpj());
		senha = new JPasswordField();
		ArrayList<Gerente> gerente = GerenteControlador.getAll();
		trocaGerenteCampo = new JComboBox(gerente.toArray());
		for (int i = 0; i < gerente.size(); i++) {
			if (((Gerente) trocaGerenteCampo.getItemAt(i)).getId() == cliente
					.getGerenteId()) {
				trocaGerenteCampo.setSelectedIndex(i);
				break;
			}
		}

		organizaFields(layout);

		tela.setLayout(new BorderLayout());
		tela.add(painel, BorderLayout.CENTER);
		tela.setVisible(true);

	}

	class acao implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent arg0) {
			if (arg0.getSource() == voltar) {
				tela.dispose();
			}
			if (arg0.getSource() == alterar) {
				String senhaCliente = String.copyValueOf(senha.getPassword());
				if (GerenteControlador.validaDadosCliente(nomeCampo.getText(),
						loginCampo.getText(), cliente.getSenha(), cliente
								.getSenha(), emailCampo.getText(), cpfCnpjCampo
								.getText())) {
					ClienteControlador.alterarCliente(verClientesView,
							visualizarClienteView, tela, cliente, nomeCampo
									.getText(), loginCampo.getText(),
							senhaCliente, emailCampo.getText(), cpfCnpjCampo
									.getText(), (Gerente) trocaGerenteCampo
									.getSelectedItem());
				} else {
					JOptionPane.showMessageDialog(tela, "Dados Incompletos");
				}
			}
		}

	}

	private void criaGruposVerticais(GroupLayout layout) {
		GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup();
		vGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
				.addComponent(nome).addComponent(nomeCampo));
		vGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
				.addComponent(login).addComponent(loginCampo));
		vGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
				.addComponent(email).addComponent(emailCampo));
		vGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
				.addComponent(cpfCnpj).addComponent(cpfCnpjCampo));
		vGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
				.addComponent(trocaGerente).addComponent(trocaGerenteCampo));
		vGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
				.addComponent(autorizacao));
		vGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
				.addComponent(senha));
		vGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
				.addComponent(voltar).addComponent(alterar));
		layout.setVerticalGroup(vGroup);
	}

	private void criaGruposHorizontais(GroupLayout layout) {
		GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup();
		hGroup.addGroup(layout.createParallelGroup().addComponent(nome)
				.addComponent(login).addComponent(email).addComponent(cpfCnpj)
				.addComponent(trocaGerente).addComponent(autorizacao)
				.addComponent(senha).addComponent(voltar));
		hGroup.addGroup(layout.createParallelGroup().addComponent(nomeCampo)
				.addComponent(loginCampo).addComponent(emailCampo)
				.addComponent(cpfCnpjCampo).addComponent(trocaGerenteCampo)
				.addComponent(alterar));
		layout.setHorizontalGroup(hGroup);
	}

	private void organizaFields(GroupLayout layout) {
		criaGruposHorizontais(layout);
		criaGruposVerticais(layout);
	}

}
